using UnityEngine;
using System.Collections;

public enum ATTRIBUTES{
	STRENGTH,
	DEXTERITY,
	CONSTITUTION,
	AGILITY,
	TECHNIQUE,
	NONE
}

public class Attribute{

	private ATTRIBUTES type;
	
	private float baseValue;
	private float bonusValue;
	private float totalValue;
	private float percentageBonus;
	private void UpdateTotalValue(){
		totalValue = this.baseValue + this.bonusValue;	
		totalValue *= 1 + (percentageBonus/100);
	}
	
	public Attribute(ATTRIBUTES type, float baseVal){
		this.type = type;
		baseValue = baseVal;
		bonusValue = 0;
		percentageBonus = 0;
		UpdateTotalValue();
	}
	/// <summary>
	/// Aumenta el valor base del atributo, se usa al subir de nivel por ejemplo.
	/// </summary>
	/// <param name='ammount'>
	/// Cantidad a aumentar, si pasas negativo le resta.
	/// </param>
	public void RaiseBaseValue(float ammount){
		baseValue += ammount;
		if (baseValue<0)
			baseValue = 0;
		UpdateTotalValue();
	}
	public float GetBaseValue(){ return baseValue;}
	/// <summary>
	/// Agrega la cantidad al bonificador temporal de este estatus, funcionaría como un Buff.
	/// </summary>
	/// <param name='ammount'>
	/// Cantidad a sumar.
	/// </param>
	public void AddToBonus(float ammount){ 
		bonusValue+=ammount; 
		UpdateTotalValue();
	}
	public float GetBonusValue(){ return bonusValue;}
	/// <summary>
	/// El valor total es la suma del base y los bonus activos.
	/// </summary>
	public float GetTotalValue(){return totalValue;}
	/// <summary>
	/// Aumenta el porcentaje de bonus que se calcula para sacar el total del atributo.
	/// Calculo (Base + bonus) + porcentageBonus = Total.
	/// </summary>
	/// <param name='ammount'>
	/// La cantidad chango.
	/// </param>
	public void AddToPercetageBonus(float ammount){
		percentageBonus += ammount;
		UpdateTotalValue();
	}
	public float GetPercentageBonus(){return percentageBonus;}
	public float[] ToArrayData(){
		return new float[3]{baseValue,bonusValue,percentageBonus};	
	}
	public void SetArrayData(float[] values){
		this.baseValue = values[0];
		this.bonusValue = values[1];
		this.percentageBonus = values[2];
		UpdateTotalValue();
	}
}
